home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / amig(ad)os / ringard'production / killprime / src / killprime.c next >
C/C++ Source or Header  |  1977-12-31  |  3KB  |  111 lines

  1. #include "carac.h"
  2. #include <proto/exec.h>
  3. #include <exec/memory.h>
  4. #include <proto/dos.h>
  5. #include <proto/BigNum.h>
  6. #include <proto/timer.h>
  7. #include <devices/timer.h>
  8. #include <string.h>
  9.  
  10. #define MEM MEMF_FAST|MEMF_CLEAR
  11. #define TEMPLATE "Number/M,RHO/S,DIFFC/S,BRUTE/S,DeeP/N"
  12. #define TXT GRAS"\n   KillPrime 1.0    The Prime Numbers killer !!"NORM"\n\n   © Allenbrand Brice 1996\n\n   Ringard'Production\n\n   "ITALIK"Usage : KillPrime ?\n\n"NORM
  13. #define WARN "Needs BigNum.library v37 !!\n"
  14. #define VER "$VER: KillPrime 1.0 * "__DATE__
  15. #define PRIME "Probably Prime\n"
  16. #define PIME "Surely Prime\n"
  17. #define UHH "No method !\n"
  18.  
  19. void maine(void)
  20. {
  21.  struct DosLibrary *DOSBase;
  22.  struct Library *BigNumBase;
  23.  struct RDArgs *rdargs;
  24.  struct Library *TimerBase;
  25.  struct timerequest *tr;
  26.  struct timeval aa,bb;
  27.  static char pipo[]=VER;
  28.  long opts[5];
  29.  int zz=10;
  30.  int a=-5;
  31.  long Err;
  32.  PtrBigNum x,y,z;
  33.  
  34.  memset(opts,0,sizeof(opts));
  35.  if(DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",37))
  36.  {
  37.   if(BigNumBase=OpenLibrary("BigNum.library",37))
  38.   {
  39.    if(tr=(struct timerequest *)AllocVec(sizeof(struct timerequest),MEM))
  40.    {
  41.     if(!(Err=OpenDevice("timer.device",UNIT_MICROHZ,(struct IORequest *)tr,0)))
  42.     {
  43.      TimerBase=(struct Library *)tr->tr_node.io_Device;
  44.      if(rdargs=ReadArgs(TEMPLATE,opts,NULL))
  45.      {
  46.       if(opts[0])
  47.       {
  48.        x=BigNumInit();
  49.        y=BigNumInit();
  50.        z=BigNumInit();
  51.        BigNumStrToBigNum(x,*((char **)opts[0]));
  52.        if(opts[4])
  53.        {
  54.         zz=(*(int *)(opts[1]));
  55.         if(zz>31)
  56.          zz=31;
  57.         if(zz<2)
  58.          zz=2;
  59.        }
  60.        GetSysTime(&aa);
  61.        if(opts[1])
  62.         a=BigNumRho(x,y,zz);
  63.        else
  64.         if(opts[2])
  65.          a=BigNumDiffCarre(x,y,zz);
  66.         else
  67.          if(opts[3])
  68.           a=BigNumBrutePrime(x,1);
  69.        GetSysTime(&bb);
  70.        SubTime(&bb,&aa);
  71.        if(a!=-5)
  72.         Printf("(%ld.%05ld s)\n\n",bb.tv_secs,bb.tv_micro);
  73.        if((!opts[3])||(opts[1])||(opts[2]))
  74.         if(a>0)
  75.          Printf(PRIME);
  76.         else
  77.          if(a==-1)
  78.           Printf(PIME);
  79.          else
  80.           if(!a)
  81.           {
  82.            Printf("=");
  83.            BigNumPrint(y);
  84.            Printf("x");
  85.            BigNumDiv(x,y,z);
  86.            BigNumPrint(z);
  87.            Printf("\n");
  88.           }
  89.           else
  90.            if(!opts[3])
  91.             Printf(UHH);
  92.         BigNumFree(3);
  93.        }
  94.        else
  95.         Printf(TXT);
  96.       FreeArgs(rdargs);
  97.      }
  98.      CloseDevice((struct IORequest *)tr);
  99.     }
  100.     else
  101.      PrintFault(IoErr(),NULL);
  102.     FreeVec(tr);
  103.    }  
  104.    CloseLibrary(BigNumBase);
  105.   }
  106.   else
  107.    Printf(WARN);
  108.   CloseLibrary((struct Library *)DOSBase);
  109.  }
  110. }
  111.